package com.ruoyi.common.core.domain.entity;

import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.UUIDGenerator;
import org.babyfish.jimmer.Formula;
import org.babyfish.jimmer.sql.*;
import org.springframework.lang.Nullable;

import java.util.List;
import java.util.Objects;

/**
 * 部门表 sys_dept
 *
 * @author ruoyi
 */
@Entity
@Table(name = "sys_dept")
public interface SysDept extends BaseEntity {

    /**
     * 部门ID
     */
    @Id
    @GeneratedValue(generatorType = UUIDGenerator.class)
    String deptId();

    /**
     * 祖级列表
     */
    String ancestors();

    /**
     * 部门名称
     */
    String deptName();

    /**
     * 显示顺序
     */
    Integer orderNum();

    /**
     * 负责人
     */
    @Nullable
    String leader();

    /**
     * 联系电话
     */
    @Nullable
    String phone();

    /**
     * 邮箱
     */
    @Nullable
    String email();

    /**
     * 部门状态:0正常,1停用
     */
    String status();

    /**
     * 删除标志（0代表存在 2代表删除）
     */
    @Default("0")
    @LogicalDeleted("2")
    int delFlag();

    /**
     * 子部门
     */
    @OneToMany(mappedBy = "parent")
    List<SysDept> children();

    /**
     * 上级组织
     */
    @Nullable
    @ManyToOne
    @OnDissociate(DissociateAction.DELETE)
    SysDept parent();

    @IdView
    @Nullable
    String parentId();

    @ManyToMany(mappedBy = "depts")
    List<SysRole> roles();

    @OneToMany(mappedBy = "dept")
    List<SysUser> users();

    @Formula(dependencies = {"status"})
    default boolean disabled() {
        return Objects.equals(this.status(), "1");
    }
}
